<?php

namespace app\services\activity\free;

use app\dao\activity\free\FreeProductRelationDao;
use app\model\activity\free\FreeProductRelation;
use app\services\BaseServices;
class FreeProductRelationServices extends BaseServices
{
    public function __construct(FreeProductRelationDao $dao)
    {
        $this->dao = $dao;
    }


    public function syncFreeProductRelation($free_id, $product_ids)
    {
        try {
            // 如果 product_ids 数组为空，直接删除所有与 free_id 关联的记录
            if (empty($product_ids)) {
                FreeProductRelation::where('free_id', $free_id)->delete();
            } else {
                // 获取与 free_id 关联的现有记录
                $existingRecords = FreeProductRelation::where('free_id', $free_id)->select();


                // 遍历 product_ids 数组
                foreach ($product_ids as $item) {
                    $product_id = $item['product_id'];
                    $product_attr_value_unique = $item['product_attr_value_unique'];

                    // 检查是否存在 product_id 的现有记录
                    $existingRecord = $existingRecords->where('product_id', $product_id)->where('product_attr_value_unique', $product_attr_value_unique)->first();

                    if (!$existingRecord) {
                        // 创建新记录
                        FreeProductRelation::create([
                            'product_id' => $product_id,
                            'product_attr_value_unique'  => $product_attr_value_unique,
                            'free_id' => $free_id,
                            'add_time' => time(), // 假设 add_time 是当前时间戳
                        ]);
                    }
                }

                // 删除不在 product_ids 数组中的记录
                FreeProductRelation::where('free_id', $free_id)
                    ->whereNotIn('product_attr_value_unique', array_column($product_ids, 'product_attr_value_unique'))
                    ->delete();
            }

            return true; // 执行成功，返回 true
        } catch (\Exception $e) {
            // 捕获异常，返回 false
            return false;
        }
    }
}